import Link from "next/link"; import { notFound } from "next/navigation"; import { ArrowLeft } from "lucide-react"; import { requireAdmin } from "@/lib/session"; import { CONCRETE_NETWORKS, PROVIDER_IDS, getDomainProfile } from "@/lib/queries/admin"; import { formatDate, formatMs, formatNumber, formatPercent, formatUsd } from "@/lib/format"; import { PageHeader } from "@/components/ui/page-header"; import { Badge, StatusBadge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Stat, StatGrid } from "@/components/ui/stat"; import { Table, TableBody, TableCell, TableEmpty, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { DateCell, KV, Mono, NetworkBadge, Panel, ProviderBadge, numCell } from "@/components/admin/primitives"; import { DomainPolicyEditor, ResetDomainStatsButton } from "@/components/admin/domain-policy-editor"; export const dynamic = "force-dynamic"; export default async function AdminDomainDetail({ params }: { params: Promise<{ domain: string }> }) { await requireAdmin(); const { domain: raw } = await params; const domain = decodeURIComponent(raw).toLowerCase(); const d = await getDomainProfile(domain); if (!d) notFound(); const p = d.profile; const routes = Object.entries(p.routeStats ?? {}).sort((a, b) => b[1].n - a[1].n); const availableKeys = Array.from(new Set([...routes.map(([k]) => k), ...PROVIDER_IDS.flatMap((pr) => CONCRETE_NETWORKS.map((n) => `${pr}:${n}`))])); return ( <>